package com.proyecto.track.dao;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import com.proyecto.track.action.ProyectoAction;
import com.proyecto.track.bo.Usuario;

// TODO: Auto-generated Javadoc
/**
 * The Class UsuarioDAOImp.
 */
@Transactional(rollbackFor=Exception.class)
public class UsuarioDAOImp extends HibernateDaoSupport implements UsuarioDAO{

	private Logger log = Logger.getLogger(ProyectoAction.class);

	/**
	 * Inits the session factory.
	 * 
	 * @param factory
	 *            the factory
	 */
	@Autowired
	public void initSessionFactory(SessionFactory factory) {
	    setSessionFactory(factory);
	}
	
	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.UsuarioDAO#guardarUsuario(com.proyecto.track.bo.Usuario)
	 */
	public Long guardarUsuario(Usuario usuario){
		super.getHibernateTemplate().save(usuario);
		return usuario.getIdUsuario();
	}
	
	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.UsuarioDAO#actualizarUsuario(com.proyecto.track.bo.Usuario)
	 */
	public void actualizarUsuario(Usuario usuario)  {
		super.getHibernateTemplate().update(usuario);
	}

	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.UsuarioDAO#borrarUsuario(java.lang.Long)
	 */
	public void borrarUsuario(Long id) {
		Usuario p = (Usuario) super.getHibernateTemplate().load(Usuario.class, id);
		super.getHibernateTemplate().delete(p);
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> getAllUsuarios() {
		return super.getHibernateTemplate().find("from Usuario");
	}
	
	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.UsuarioDAO#getUsuarioById(java.lang.Long)
	 */
	public Usuario getUsuarioById(Long id) {
		return (Usuario) super.getHibernateTemplate().get(Usuario.class, id);
	}


	/* (non-Javadoc)
	 * @see com.proyecto.track.dao.UsuarioDAO#getUsuariosAsignadosForProyecto(java.lang.Long)
	 */
	@SuppressWarnings("unchecked")
	public List<Usuario> getUsuariosAsignadosForProyecto(Long idProyecto) {
		return super.getHibernateTemplate().find("select p.recursosAsignados from Proyecto as p where idProyecto = :idProyecto");

		}

		/* (non-Javadoc)
		 * @see com.proyecto.track.dao.UsuarioDAO#getUsuariosForTarea(java.lang.Long)
		 */
		@SuppressWarnings("unchecked")
		public List<Usuario> getUsuariosForTarea(Long idTarea) {
		return super.getHibernateTemplate().find("select t.asignados from Tarea as t where idTarea = :idTarea");

	}

		@SuppressWarnings("unchecked")
		public Usuario getUsuarioByName(String nombreLogin) {
			log.info(this.getClass().getCanonicalName() + " Consultando si existe el usuario");
			return (Usuario)DataAccessUtils.uniqueResult(super.getHibernateTemplate().find("from Usuario as u where u.nombre =?", nombreLogin));
		}

	
}
